package WaitGroup

import (
	"fmt"
	"os"
	"os/signal"
	"sync"
	"syscall"
)

func Init() {
	// 创建一个 WaitGroup 来等待关闭信号
	var wg sync.WaitGroup
	wg.Add(1)

	// 启动你的应用程序逻辑
	go func() {
		// 在这里编写你的应用程序逻辑
		// 例如，你可以运行一个服务器或执行其他任务

		// 模拟应用程序运行，等待关闭信号
		<-waitForSignal()

		fmt.Println("Shutting down...")

		// 在这里执行清理操作和关闭资源
		// ...

		wg.Done() // 标记任务完成
	}()

	// 等待关闭信号
	wg.Wait()

	fmt.Println("Exiting...")
}

// waitForSignal 返回一个通道，用于等待关闭信号
func waitForSignal() chan os.Signal {
	c := make(chan os.Signal, 1)
	signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
	return c
}
